package com.neuedu.web.utils;

import com.neuedu.web.common.PageInfo;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 项目：      his
 * 类名:       ParamUtils
 * 创建时间：  2023/12/8 11：05
 * 描述 :     \
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
public class ParamUtils {


    /**
     * 查询分页的 页号 和每页显示多少条
     * @param request
     * @return
     */
    public static PageInfo getPageInfo(HttpServletRequest request){

        PageInfo pageInfo = new PageInfo();


        String strCurrent = request.getParameter("current");
        String strSize = request.getParameter("size");
        if(strCurrent != null ){
            pageInfo.setCurrent(Integer.parseInt(strCurrent));
        }
        if(strCurrent != null ){
            pageInfo.setSize( Integer.parseInt(strSize));

        }



        return pageInfo;
    }



    public static <T> T getParam(Class<T> clazz , HttpServletRequest request) {


        Object obj = null;
        try {
            obj = clazz.newInstance();
            //从request中获取参数
            Map map = request.getParameterMap();
            //遍历所有的 key
            /***
             * username:
             * 11212
             * password:
             * 12
             * nickname:
             * 12
             * deptId:
             * 1
             * deptName:

             * expire:
             */
            //清楚 没有值的参数

            Set<Map.Entry<String,Object[]>> set = map.entrySet();

            Map paramMap = new HashMap();
            for (Map.Entry<String,Object[]> entry : set) {
                Object[] value = (Object[]) entry.getValue();
                if(value == null || "".equals(value)   || (value.length == 1 && (value[0] == null || "".equals(value[0]) ) ) ){
                }else{ //只放有  value 对应的 参数
                    paramMap.put(entry.getKey(),entry.getValue());
                }
            }

            BeanUtils.populate(obj ,paramMap);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        }
        return (T) obj;
    }




    //String  --Integer
    //String -- Long
    //String   Double
    //String( 1701997963000  \2021-01-01       2021/21/01          2021/21/01 15:59:01  2021-01-01 15:59:01    )   Date

    //注册一个日期转换器
//     static{
//         ConvertUtils.register(new Converter() {
//             @Override
//             public <T> T convert(Class<T> type, Object value) {
//
//                 if(value== null || "".equals(value)){
//                     return null;
//                 }
//                 List<SimpleDateFormat> list = new ArrayList<>();
//                 list.add(new SimpleDateFormat("yyyy-MM-dd"));
//                 list.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//                 list.add(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
//                 list.add(new SimpleDateFormat("yyyy/MM/dd "));
//
//                 if(value instanceof  String){
//                     String paramsValue = (String) value;
//
//                     for (SimpleDateFormat sdf : list) {
//                         try {
//                             Date parse = sdf.parse(paramsValue);
//                             return (T) parse;
//                         } catch (ParseException e) {
// //                           e.printStackTrace();
//                         }
//                     }
//
//
//                     //1701997963000
//                     return (T) new Date(Long.valueOf(paramsValue));
//
//                 }
//                 return null;
//             }
//         }, Date.class);
//     }



}
